package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

func consumer(queue chan int) {
	defer wg.Done()
	/*for data := range queue {
		fmt.Println(data)
	}*/
	for {
		data, ok := <-queue
		if !ok {
			break
		}
		fmt.Println(data)
		time.Sleep(time.Second)
	}
}

func main() {
	/**
	channel 提供了一种通信机制
	*/
	// 1 定义一个channel
	var msg chan int
	// 2 初始化这个channel
	msg = make(chan int) // 第一种方式, 无缓冲的
	// msg = make(chan int, 1) // 第二种方式, 有缓冲空间
	// go 中使用make初始化的有3种, 1.slice 3.map 3.channel
	wg.Add(1)
	go consumer(msg)
	msg <- 1
	// 关闭channel,	1.已经关闭的channel不能发送数据	2.已经关闭的channel能继续取数据, 直到数据取完为止
	close(msg)
	wg.Wait()
}
